
#ifdef SOLVER_STATISTICS
#include <iostream>
#include "Solver.hpp"
#include "MACRO.hpp"
int  STATISTICS::calls_SOLVERgetSlack{};
int  STATISTICS::calls_SOLVERgetDual{};
int  STATISTICS::calls_SOLVERgetNumRow{};
int  STATISTICS::calls_SOLVERgetNumCol{};
int  STATISTICS::calls_SOLVERdelconstrs{};
int  STATISTICS::calls_SOLVERreoptimize{};
int  STATISTICS::calls_SOLVERoptimize{};
int  STATISTICS::calls_SOLVERsetVTypearray{};
int  STATISTICS::calls_SOLVERsetSensearray{};
int  STATISTICS::calls_SOLVERcopymodel{};
int  STATISTICS::calls_SOLVERpassenv{};
int  STATISTICS::calls_SOLVERfreemodel{};
int  STATISTICS::calls_SOLVERnewmodel{};
int  STATISTICS::calls_SOLVERaddconstrs{};
int  STATISTICS::calls_SOLVERupdatemodel{};
int  STATISTICS::calls_SOLVERwrite{};
int  STATISTICS::calls_SOLVERdelvars{};
int  STATISTICS::calls_SOLVERfreeenv{};
int  STATISTICS::calls_SOLVERgetObjVal{};
int  STATISTICS::calls_SOLVERgetX{};
int  STATISTICS::calls_SOLVERgetsolver{};
int  STATISTICS::calls_SOLVERgetenv{};
int  STATISTICS::calls_SOLVERgetRC{};
int  STATISTICS::calls_SOLVERchgcoeffs{};
int  STATISTICS::calls_SOLVERXchgcoeffs{};
int  STATISTICS::calls_SOLVERsetRHS{};
int  STATISTICS::calls_SOLVERaddconstr{};
int  STATISTICS::calls_SOLVERaddvars{};
int  STATISTICS::calls_SOLVERXaddvars{};
int  STATISTICS::calls_SOLVERXaddconstrs{};
int  STATISTICS::calls_SOLVERXgetconstrs{};
int  STATISTICS::calls_SOLVERgetconstrs{};
int  STATISTICS::calls_SOLVERgetStatus{};
int  STATISTICS::calls_SOLVERsetenvMethod{};
int  STATISTICS::calls_SOLVERloadenv{};
int  STATISTICS::calls_SOLVERsetenvThreads{};
int  STATISTICS::calls_SOLVERsetenvOutputFlag{};
int  STATISTICS::calls_SOLVERsetenvInfUnbdInfo{};
int  STATISTICS::calls_SOLVERsetenvCutoff{};
int  STATISTICS::calls_SOLVERsetenvTimeLimit{};
int  STATISTICS::calls_SOLVERsetModelSense{};
int  STATISTICS::calls_SOLVERsetVBasis{};
int  STATISTICS::calls_SOLVERsetCBasis{};
int  STATISTICS::calls_SOLVERgetVBasis{};
int  STATISTICS::calls_SOLVERgetCBasis{};
int STATISTICS::calls_SOLVERXgetvars{};
int STATISTICS::calls_SOLVERgetObj{};
int STATISTICS::calls_SOLVERgetRhs{};
int STATISTICS::calls_SOLVERMIPoptimize{};
int STATISTICS::calls_SOLVERsetenvMIPGap{};
int STATISTICS::calls_SOLVERgetSense{};
int STATISTICS::calls_SOLVERchgObj{};
int STATISTICS::calls_SOLVERchgRhs{};
int STATISTICS::calls_SOLVERgetenvMethod{};

double  STATISTICS::time_SOLVERgetSlack{};
double  STATISTICS::time_SOLVERgetDual{};
double  STATISTICS::time_SOLVERgetNumRow{};
double  STATISTICS::time_SOLVERgetNumCol{};
double  STATISTICS::time_SOLVERdelconstrs{};
double  STATISTICS::time_SOLVERreoptimize{};
double  STATISTICS::time_SOLVERoptimize{};
double  STATISTICS::time_SOLVERsetVTypearray{};
double  STATISTICS::time_SOLVERsetSensearray{};
double  STATISTICS::time_SOLVERcopymodel{};
double  STATISTICS::time_SOLVERpassenv{};
double  STATISTICS::time_SOLVERfreemodel{};
double  STATISTICS::time_SOLVERnewmodel{};
double  STATISTICS::time_SOLVERaddconstrs{};
double  STATISTICS::time_SOLVERupdatemodel{};
double  STATISTICS::time_SOLVERwrite{};
double  STATISTICS::time_SOLVERdelvars{};
double  STATISTICS::time_SOLVERfreeenv{};
double  STATISTICS::time_SOLVERgetObjVal{};
double  STATISTICS::time_SOLVERgetX{};
double  STATISTICS::time_SOLVERgetsolver{};
double  STATISTICS::time_SOLVERgetenv{};
double  STATISTICS::time_SOLVERgetRC{};
double  STATISTICS::time_SOLVERchgcoeffs{};
double  STATISTICS::time_SOLVERXchgcoeffs{};
double  STATISTICS::time_SOLVERsetRHS{};
double  STATISTICS::time_SOLVERaddconstr{};
double  STATISTICS::time_SOLVERaddvars{};
double  STATISTICS::time_SOLVERXaddvars{};
double  STATISTICS::time_SOLVERXaddconstrs{};
double  STATISTICS::time_SOLVERXgetconstrs{};
double  STATISTICS::time_SOLVERgetconstrs{};
double  STATISTICS::time_SOLVERgetStatus{};
double  STATISTICS::time_SOLVERsetenvMethod{};
double  STATISTICS::time_SOLVERloadenv{};
double  STATISTICS::time_SOLVERsetenvThreads{};
double  STATISTICS::time_SOLVERsetenvOutputFlag{};
double  STATISTICS::time_SOLVERsetenvInfUnbdInfo{};
double  STATISTICS::time_SOLVERsetenvCutoff{};
double  STATISTICS::time_SOLVERsetenvTimeLimit{};
double  STATISTICS::time_SOLVERsetModelSense{};
double  STATISTICS::time_SOLVERsetVBasis{};
double  STATISTICS::time_SOLVERsetCBasis{};
double  STATISTICS::time_SOLVERgetVBasis{};
double  STATISTICS::time_SOLVERgetCBasis{};
double STATISTICS::time_SOLVERXgetvars{};
double STATISTICS::time_SOLVERgetObj{};
double STATISTICS::time_SOLVERgetRhs{};
double STATISTICS::time_SOLVERMIPoptimize{};
double STATISTICS::time_SOLVERsetenvMIPGap{};
double STATISTICS::time_SOLVERgetSense{};
double STATISTICS::time_SOLVERchgObj{};
double STATISTICS::time_SOLVERchgRhs{};
double STATISTICS::time_SOLVERgetenvMethod{};

void STATISTICS::giveStatistics(const std::string &StatisticsName) {
  std::cout << BIG_PHASE_SEPARATION << std::endl;
  std::cout << "Statistics for " << StatisticsName << std::endl;
  std::cout << BIG_PHASE_SEPARATION << std::endl;
  std::cout << "calls_SOLVERgetSlack " << calls_SOLVERgetSlack << std::endl;
  std::cout << "calls_SOLVERgetDual " << calls_SOLVERgetDual << std::endl;
  std::cout << "calls_SOLVERgetNumRow " << calls_SOLVERgetNumRow << std::endl;
  std::cout << "calls_SOLVERgetNumCol " << calls_SOLVERgetNumCol << std::endl;
  std::cout << "calls_SOLVERdelconstrs " << calls_SOLVERdelconstrs << std::endl;
  std::cout << "calls_SOLVERreoptimize " << calls_SOLVERreoptimize << std::endl;
  std::cout << "calls_SOLVERoptimize " << calls_SOLVERoptimize << std::endl;
  std::cout << "calls_SOLVERsetVTypearray " << calls_SOLVERsetVTypearray << std::endl;
  std::cout << "calls_SOLVERsetSensearray " << calls_SOLVERsetSensearray << std::endl;
  std::cout << "calls_SOLVERcopymodel " << calls_SOLVERcopymodel << std::endl;
  std::cout << "calls_SOLVERpassenv " << calls_SOLVERpassenv << std::endl;
  std::cout << "calls_SOLVERfreemodel " << calls_SOLVERfreemodel << std::endl;
  std::cout << "calls_SOLVERnewmodel " << calls_SOLVERnewmodel << std::endl;
  std::cout << "calls_SOLVERaddconstrs " << calls_SOLVERaddconstrs << std::endl;
  std::cout << "calls_SOLVERupdatemodel " << calls_SOLVERupdatemodel << std::endl;
  std::cout << "calls_SOLVERwrite " << calls_SOLVERwrite << std::endl;
  std::cout << "calls_SOLVERdelvars " << calls_SOLVERdelvars << std::endl;
  std::cout << "calls_SOLVERfreeenv " << calls_SOLVERfreeenv << std::endl;
  std::cout << "calls_SOLVERgetObjVal " << calls_SOLVERgetObjVal << std::endl;
  std::cout << "calls_SOLVERgetX " << calls_SOLVERgetX << std::endl;
  std::cout << "calls_SOLVERgetsolver " << calls_SOLVERgetsolver << std::endl;
  std::cout << "calls_SOLVERgetenv " << calls_SOLVERgetenv << std::endl;
  std::cout << "calls_SOLVERgetRC " << calls_SOLVERgetRC << std::endl;
  std::cout << "calls_SOLVERchgcoeffs " << calls_SOLVERchgcoeffs << std::endl;
  std::cout << "calls_SOLVERXchgcoeffs " << calls_SOLVERXchgcoeffs << std::endl;
  std::cout << "calls_SOLVERsetRHS " << calls_SOLVERsetRHS << std::endl;
  std::cout << "calls_SOLVERaddconstr " << calls_SOLVERaddconstr << std::endl;
  std::cout << "calls_SOLVERaddvars " << calls_SOLVERaddvars << std::endl;
  std::cout << "calls_SOLVERXaddvars " << calls_SOLVERXaddvars << std::endl;
  std::cout << "calls_SOLVERXaddconstrs " << calls_SOLVERXaddconstrs << std::endl;
  std::cout << "calls_SOLVERXgetconstrs " << calls_SOLVERXgetconstrs << std::endl;
  std::cout << "calls_SOLVERgetconstrs " << calls_SOLVERgetconstrs << std::endl;
  std::cout << "calls_SOLVERgetStatus " << calls_SOLVERgetStatus << std::endl;
  std::cout << "calls_SOLVERsetenvMethod " << calls_SOLVERsetenvMethod << std::endl;
  std::cout << "calls_SOLVERloadenv " << calls_SOLVERloadenv << std::endl;
  std::cout << "calls_SOLVERsetenvThreads " << calls_SOLVERsetenvThreads << std::endl;
  std::cout << "calls_SOLVERsetenvOutputFlag " << calls_SOLVERsetenvOutputFlag << std::endl;
  std::cout << "calls_SOLVERsetenvInfUnbdInfo " << calls_SOLVERsetenvInfUnbdInfo << std::endl;
  std::cout << "calls_SOLVERsetenvCutoff " << calls_SOLVERsetenvCutoff << std::endl;
  std::cout << "calls_SOLVERsetenvTimeLimit " << calls_SOLVERsetenvTimeLimit << std::endl;
  std::cout << "calls_SOLVERsetModelSense " << calls_SOLVERsetModelSense << std::endl;
  std::cout << "calls_SOLVERsetVBasis " << calls_SOLVERsetVBasis << std::endl;
  std::cout << "calls_SOLVERsetCBasis " << calls_SOLVERsetCBasis << std::endl;
  std::cout << "calls_SOLVERgetVBasis " << calls_SOLVERgetVBasis << std::endl;
  std::cout << "calls_SOLVERgetCBasis " << calls_SOLVERgetCBasis << std::endl;
  std::cout << "calls_SOLVERXgetvars " << calls_SOLVERXgetvars << std::endl;
  std::cout << "calls_SOLVERgetObj " << calls_SOLVERgetObj << std::endl;
  std::cout << "calls_SOLVERgetRHS " << calls_SOLVERgetRhs << std::endl;
  std::cout << "calls_SOLVERMIPoptimize " << calls_SOLVERMIPoptimize << std::endl;
  std::cout << "calls_SOLVERsetenvMIPGap " << calls_SOLVERsetenvMIPGap << std::endl;
  std::cout << "calls_SOLVERgetSense " << calls_SOLVERgetSense << std::endl;
  std::cout << "calls_SOLVERchgObj " << calls_SOLVERchgObj << std::endl;
  std::cout << "calls_SOLVERchgrhs " << calls_SOLVERchgRhs << std::endl;
  std::cout << "calls_SOLVERgetenvMethod " << calls_SOLVERgetenvMethod << std::endl;

  std::cout << BIG_PHASE_SEPARATION << std::endl;
  std::cout << "time_SOLVERgetSlack " << time_SOLVERgetSlack << std::endl;
  std::cout << "time_SOLVERgetDual " << time_SOLVERgetDual << std::endl;
  std::cout << "time_SOLVERgetNumRow " << time_SOLVERgetNumRow << std::endl;
  std::cout << "time_SOLVERgetNumCol " << time_SOLVERgetNumCol << std::endl;
  std::cout << "time_SOLVERdelconstrs " << time_SOLVERdelconstrs << std::endl;
  std::cout << "time_SOLVERreoptimize " << time_SOLVERreoptimize << std::endl;
  std::cout << "time_SOLVERoptimize " << time_SOLVERoptimize << std::endl;
  std::cout << "time_SOLVERsetVTypearray " << time_SOLVERsetVTypearray << std::endl;
  std::cout << "time_SOLVERsetSensearray " << time_SOLVERsetSensearray << std::endl;
  std::cout << "time_SOLVERcopymodel " << time_SOLVERcopymodel << std::endl;
  std::cout << "time_SOLVERpassenv " << time_SOLVERpassenv << std::endl;
  std::cout << "time_SOLVERfreemodel " << time_SOLVERfreemodel << std::endl;
  std::cout << "time_SOLVERnewmodel " << time_SOLVERnewmodel << std::endl;
  std::cout << "time_SOLVERaddconstrs " << time_SOLVERaddconstrs << std::endl;
  std::cout << "time_SOLVERupdatemodel " << time_SOLVERupdatemodel << std::endl;
  std::cout << "time_SOLVERwrite " << time_SOLVERwrite << std::endl;
  std::cout << "time_SOLVERdelvars " << time_SOLVERdelvars << std::endl;
  std::cout << "time_SOLVERfreeenv " << time_SOLVERfreeenv << std::endl;
  std::cout << "time_SOLVERgetObjVal " << time_SOLVERgetObjVal << std::endl;
  std::cout << "time_SOLVERgetX " << time_SOLVERgetX << std::endl;
  std::cout << "time_SOLVERgetsolver " << time_SOLVERgetsolver << std::endl;
  std::cout << "time_SOLVERgetenv " << time_SOLVERgetenv << std::endl;
  std::cout << "time_SOLVERgetRC " << time_SOLVERgetRC << std::endl;
  std::cout << "time_SOLVERchgcoeffs " << time_SOLVERchgcoeffs << std::endl;
  std::cout << "time_SOLVERXchgcoeffs " << time_SOLVERXchgcoeffs << std::endl;
  std::cout << "time_SOLVERsetRHS " << time_SOLVERsetRHS << std::endl;
  std::cout << "time_SOLVERaddconstr " << time_SOLVERaddconstr << std::endl;
  std::cout << "time_SOLVERaddvars " << time_SOLVERaddvars << std::endl;
  std::cout << "time_SOLVERXaddvars " << time_SOLVERXaddvars << std::endl;
  std::cout << "time_SOLVERXaddconstrs " << time_SOLVERXaddconstrs << std::endl;
  std::cout << "time_SOLVERXgetconstrs " << time_SOLVERXgetconstrs << std::endl;
  std::cout << "time_SOLVERgetconstrs " << time_SOLVERgetconstrs << std::endl;
  std::cout << "time_SOLVERgetStatus " << time_SOLVERgetStatus << std::endl;
  std::cout << "time_SOLVERsetenvMethod " << time_SOLVERsetenvMethod << std::endl;
  std::cout << "time_SOLVERloadenv " << time_SOLVERloadenv << std::endl;
  std::cout << "time_SOLVERsetenvThreads " << time_SOLVERsetenvThreads << std::endl;
  std::cout << "time_SOLVERsetenvOutputFlag " << time_SOLVERsetenvOutputFlag << std::endl;
  std::cout << "time_SOLVERsetenvInfUnbdInfo " << time_SOLVERsetenvInfUnbdInfo << std::endl;
  std::cout << "time_SOLVERsetenvCutoff " << time_SOLVERsetenvCutoff << std::endl;
  std::cout << "time_SOLVERsetenvTimeLimit " << time_SOLVERsetenvTimeLimit << std::endl;
  std::cout << "time_SOLVERsetModelSense " << time_SOLVERsetModelSense << std::endl;
  std::cout << "time_SOLVERsetVBasis " << time_SOLVERsetVBasis << std::endl;
  std::cout << "time_SOLVERsetCBasis " << time_SOLVERsetCBasis << std::endl;
  std::cout << "time_SOLVERgetVBasis " << time_SOLVERgetVBasis << std::endl;
  std::cout << "time_SOLVERgetCBasis " << time_SOLVERgetCBasis << std::endl;
  std::cout << "time_SOLVERXgetvars " << time_SOLVERXgetvars << std::endl;
  std::cout << "time_SOLVERgetObj " << time_SOLVERgetObj << std::endl;
  std::cout << "time_SOLVERgetRHS " << time_SOLVERgetRhs << std::endl;
  std::cout << "time_SOLVERMIPoptimize " << time_SOLVERMIPoptimize << std::endl;
  std::cout << "time_SOLVERsetenvMIPGap " << time_SOLVERsetenvMIPGap << std::endl;
  std::cout << "time_SOLVERgetSense " << time_SOLVERgetSense << std::endl;
  std::cout << "time_SOLVERchgObj " << time_SOLVERchgObj << std::endl;
  std::cout << "time_SOLVERchgrhs " << time_SOLVERchgRhs << std::endl;
  std::cout << "time_SOLVERgetenvMethod " << time_SOLVERgetenvMethod << std::endl;
}
#endif